package com.android.support.lib.universal.base;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

/**
 * 卸载(重新安装)，安装,新版本安装。监听
 * 使用说明：
 * 一：子类调用registerReceiver()方法，注册广播
 * 二：重写ADDED()方法，当有app安装完成时(记住，必须是新应用，新包名哦，即当前设备没有该包名即可。)，会调用该方法。回调会返回包名。
 * 三：重写REMOVED()方法，当有app卸载或重新安装(新安装的版本和当前已存在的版本相同)时，会调用改方法。回调会返回包名。
 * 四：重写REPLACED()方法，有新版本替换当前旧版本。回回调该方法。回调会返回包名。注意，新版本的版本号必须高于当前版本的版本号。
 * 五：unregisterReceiver()注销广播。
 * @author 彭治铭
 *
 */
public abstract class BaseExeActivity extends BaseActivity{
	/**
	 * 监听新应用安装。(一个新应用包已经安装在设备上。记住，必须是新应用，新包名哦，即当前设备没有该包名即可。).
	 * @param packName 包名
	 */
	protected abstract void ADDED(String packName);
	
	/**
	 * 卸载，重新安装（其实重新安装不起作用，重新安装被当做卸载处理了，即新版本和当前已存在版本的版本号相同。）时回调。
	 * @param packName 包名。
	 */
	protected abstract void REMOVED(String packName);
	/**
	 * 一个新版本的应用安装到设备，替换之前已经存在的版本.注意，新版本的版本号必须高于当前版本的版本号。
	 * @param packName
	 */
	protected abstract void REPLACED(String packName);


	// 广播
	BroadcastReceiver InstalledReceiver = new BroadcastReceiver() {

		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			String action = intent.getAction();
			String packName = intent.getDataString();// 包名
			if (action.equals("android.intent.action.PACKAGE_ADDED")) {// 安装，一个新应用包已经安装在设备上。必须是新应用，新包名哦。(即当前设备没有该包名即可)
				ADDED(packName);
			}
			if (action.equals("android.intent.action.PACKAGE_REMOVED")) {// 卸载，重新安装（其实重新安装不起作用，重新安装被当做卸载处理了,即新版本和当前已存在版本的版本号相同。）
				REMOVED(packName);
			}
			if(action.equals("android.intent.action.PACKAGE_REPLACED")){//一个新版本的应用安装到设备，替换之前已经存在的版本.注意，新版本的版本号必须高于当前版本号。
				REPLACED(packName);
			}

		}

	};

	/**
	 * 注册广播
	 * 
	 * @param context
	 */
	public void registerReceiver(Context context) {
		// 注册广播-卸载安装监听
		IntentFilter filter = new IntentFilter();
		filter.addAction("android.intent.action.PACKAGE_ADDED");// 安装
		filter.addAction("android.intent.action.PACKAGE_REMOVED");// 卸载
		filter.addAction("android.intent.action.PACKAGE_REPLACED");// 覆盖安装,等价于卸载。
		filter.addDataScheme("package");
		context.registerReceiver(InstalledReceiver, filter);

	}

	/**
	 * 注销广播
	 * 
	 * @param context
	 */
	public void unregisterReceiver(Context context) {
		context.unregisterReceiver(InstalledReceiver);// 注销掉广播 }
	}

	@Override
	protected void initUI() {
		// TODO Auto-generated method stub

	}

	@Override
	protected void listenner() {
		// TODO Auto-generated method stub

	}

}
